home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
fish
/
701-725
/
706
/
aush
/
aush.doc
< prev
next >
Wrap
Text File
|
1995-03-18
|
37KB
|
809 lines
AUSH - Manuel de référence
1. Avertissement
Ce manuel décrit la version 1.40 de l'interpréteur de commandes
AUSH. Ce programme est placé dans le domaine public, avec autorisation de le
copier librement et de le diffuser par n'importe quels moyens, à condition
que le produit soit diffusé dans son intégralité, et sans aucune
modification. AUSH est (c)1992 par Denis GOUNELLE, toute utilisation
commerciale ou vente de ce programme sans autorisation écrite est
STRICTEMENT INTERDITE.
Malgré de nombreux tests, je ne peux garantir qu'AUSH ne contient
aucune erreur. VOUS UTILISEZ CE PROGRAMME A VOS RISQUES ET PERILS. Je ne
pourrai en aucun cas être tenu responsable de tout dommage, direct ou
indirect, résultant de l'utilisation d'AUSH.
2. Introduction
AUSH (Amiga Ultimate SHell) est un interpréteur de commande (ou
"shell") écrit pour l'Amiga, et destiné à remplacer entièrement le shell de
Commodore. Il s'inspire de tous les shells que j'ai utilisé jusqu'ici, aussi
bien sous UNIX (sh, csh, et surtout tcsh 6.00.03) que sur Amiga (AShell 1.3
et Csh 4.01A), tout en intégrant de nombreuses idées personnelles et en
gardant la plus grande compatibilité possible avec les shells Commodore et
ARP.
Vous êtes invités à me donner votre avis (critiques et suggestions)
sur ce programme, en m'écrivant à l'adresse suivante :
M. GOUNELLE Denis
Boite 71
6, rue des cailloux
92110 CLICHY - FRANCE
L'éditeur de ligne de commande a été écrit à partir de celui de Csh
v4.02A (par Mattew DILLON/Steve DREW/Carlo BORREO & Cesare DIENI).
Merci à Pierre ARDICHVILI, Jean-Yves PROUX, Jean-Philippe RAPP, et
Michel SCHINZ pour leurs tests et leurs suggestions. Merci également à Josef
EGLOFF pour la traduction des messages d'erreur en allemand.
3. Installation
Si votre Amiga dispose du système 1.3, vous devez d'abord installer
la librairie ARP, si ce n'est déjà fait, en copiant le fichier "arp.library"
dans le répertoire "LIBS:".
Copiez ensuite les fichiers "AUSH" (le shell lui-même) et "NewAUSH"
(commande pour lancer un nouveau shell) dans le répertoire "C:". Notez que
AUSH et NewAUSH sont écrits en code ré-entrant, et peuvent donc parfaitement
être rendus résidents.
4. La commande NewAUSH
Cette commande est l'équivalent des commandes "NewCLI" et "NewShell"
du shell de Commodore. Elle ne fonctionnera que si le programme "AUSH" se
trouve dans le chemin d'accès défini par la commande "Path". Pour lancer un
nouveau shell, depuis la ligne de commande, tapez :
NewAUSH [spécification de fenêtre]
exemple : NewAUSH CON:0/11/640/180/AUSH
Pour lancer un nouveau shell depuis le WorkBench, créez une icône de
type "Project". Indiquez éventuellement une taille de pile (champ "STACK")
et une spécification de fenêtre (champ "TOOL TYPE", sous la forme
"WINDOW=spécification"). N'oubliez pas de mettre le chemin d'accès à NewAUSH
dans le champ "DEFAULT TOOL".
5. Notions de base
Lorsque vous lancez AUSH, un message indiquant la version du
programme apparait, suivit d'une chaine d'invite (ou "prompt"). Par défaut,
cette chaine indique le numéro du shell, suivit du répertoire courant. Le
shell attend alors vos commandes.
Une commande simple est une suite de mots séparés par un ou
plusieurs espaces. Le premier mot indique la commande à exécuter, et les
autres sont les arguments à passer à cette commande. La longueur maximale
d'une ligne de commande est de 256 caractères dans le cas d'une commande
externe.
Si le premier mot correspond à un alias, la substitution
correspondante est effectuée. Cela continue tant que c'est possible, ce qui
veut dire qu'un alias peut être défini en fonction d'un autre. Notez
cependant qu'il n'y a pas de contrôle de récursivité des définitions. Vous
pouvez désactiver la substitution des alias en ajoutant le caractère "\"
devant le nom de la commande (par exemple "\ls df0:")
AUSH examine également les arguments, et remplace certains d'entre
eux en fonction des règles suivantes :
; tout ce qui suit est un commentaire, et est ignoré.
^car remplacé par "CTRL-car" si "car" est une lettre, par
"car" sinon.
=n remplacé par le n-ième répertoire dans la pile des
répertoires.
$var remplacé par la valeur de la variable "var" (cherchée
d'abord dans les variables locales, puis dans les
variables globales, et enfin dans les variables
ARP/Commodore et Manx) ou par une chaine vide si cette
variable n'est pas définie.
pattern remplacé par le nom de tous les fichiers correspondant.
Une "pattern" est un mot contenant au moins un des
méta-caractères ARP, dont la syntaxe est :
? n'importe quel caractère
#c n'importe quel nombre de fois (même zéro)
le caractère c
#? ou * n'importe quelle chaine, même vide
[liste] n'importe lequel des caractères indiqués
(exp1|exp2) exp1 ou exp2
~exp tout sauf exp
{expr} remplacé par la valeur de l'expression (voir la syntaxe
plus loin).
!! remplacé par la dernière commande dans l'historique.
!n remplacé par la commande numéro "n" dans l'historique.
!chaine remplacé par la dernière commande commençant par
"chaine" dans l'historique.
`cmd` remplacé par la première ligne produite en sortie par la
commande indiquée. Les espaces en tête sont éliminés
avant remplacement, la ligne est considéré comme un seul
argument et n'est pas ré-interprété.
Exemple : la commande "set toto `type config`" copie le
contenu de la première ligne du fichier "config" dans la
variable locale "toto".
\car copie le caractère indiqué sans l'interpréter.
'chaine' copie la chaine sans interprétation (à part de la forme
"\car").
"chaine" copie la chaine sans interprétation, à part des formes
"^car", "=n", "$var", "{expr}" et "\car". De plus,
l'extension des "patterns" n'est pas désactivée.
AUSH est également capable de rediriger l'entrée ou la sortie d'une
commande : au lieu de se faire sur la fenêtre courante, elle se fera sur le
fichier indiqué. La syntaxe à respecter est la suivante :
>nom redirection de la sortie vers le fichier "nom". Le
fichier est écrasé s'il existe déjà, créé sinon.
>>nom redirection de la sortie vers le fichier "nom". La
sortie est ajoutée à la fin du fichier s'il existe,
sinon le fichier est créé.
<nom redirection de l'entrée depuis le fichier "nom".
La spécification de ces redirections peut se faire n'importe où sur
la ligne de commande. Il peut y avoir un ou plusieurs espaces entre les
caractères de redirection et le nom de fichier (comme par exemple
"list > maliste").
Une commande complexe est composée d'au moins deux commandes simples
enchainées par une des formes suivantes :
cmd1|cmd2|... exécution successive de commandes simples, avec
"pipes" (la sortie de la commande à gauche du
caractère "|" est utilisée comme entrée par la
commande indiquée à droite), tant que le code retour
est nul.
cmd1,cmd2,... exécution successive de commandes, tant que le code
retour est nul. Vous pouvez spécifier des commandes
simples, mais aussi des enchainements par pipes (par
exemple "cd ram: , list | wc , delete toto").
Le code retour d'une commande complexe est celui de la dernière
commande simple exécutée. Seule la dernière commande simple d'une commande
complexe peut être lancée en arrière plan.
Une fois l'analyse de la ligne de commande terminée, AUSH lance
l'exécution de la commande correspondante. La recherche se fait d'abord dans
la liste des commandes internes au shell, puis dans la liste des commandes
résidentes, et enfin dans les répertoires indiqués à l'aide la commande
"Path". Une fois la commande lancée, AUSH attend la fin de son exécution,
met à jour certaines variables (comme celle indiquant le code retour de la
dernière commande exécutée) puis affiche de nouveau la chaine d'invite.
Vous pouvez demander une exécution en arrière plan, c'est-à-dire que
AUSH n'attendra pas la fin de la commande. Il vous faudra alors spécifier le
caractère "&" sur la ligne de commande (par exemple "list >maliste &"). Le
shell affichera alors le numéro de processus de cette commande puis le
prompt ré-apparaitra immédiatement.
Par défaut, les commandes héritent de la priorité du shell, mais
AUSH vous permet de modifier temporairement cette priorité. Ainsi, si vous
tapez une ligne de la forme "cmd @n", la commande indiquée sera exécutée
avec la priorité "n" (par exemple "list @-3" lancera la commande "list" avec
la priorité -3). Ceci ne marchera cependant pas pour les commandes internes.
De même, lors du lancement en arrière plan, vous pouvez faire suivre le
caractère "&" par la priorité à donner à la commande. Par exemple, "list
>maliste &5" lancera la commande "list" en arrière plan, avec la priorité 5.
Notez que les spécifications "&" et "@" peuvent être indiquées
n'importe où sur la ligne de commande.
6. Les variables
AUSH vous permet de définir des variables, comme dans un langage de
programmation classique. Les caractères autorisés pour les noms de variables
sont les lettres minuscules et majuscules, les chiffres, et le caractère
souligné. Notez que minuscules et majuscules sont différenciées
(contrairement aux noms de fichiers). Ces variables peuvent contenir
n'importe quelle valeur, aussi bien numérique que alphanumérique.
Les variables globales sont accessibles à tous les niveaux
d'exécution, c'est-à-dire aussi bien en mode interactif que dans les
fichiers de commandes. Elles ne peuvent être détruites. Notez qu'il ne
s'agit pas des variables au sens ARP ou Commodore. Elles ne sont pas
partagées par plusieurs shells.
Une variables locale n'est accessible que dans le niveau d'exécution
où elle a été définie pour la première fois. Lors du retour au niveau
précédent, les variables locales sont détruites automatiquement.
Certaines variables permettent de contrôler et de paramètrer AUSH.
Ces variables sont décrites plus loin.
7. Expressions
AUSH peut évaluer des expressions entières, exprimées en notation
polonaise inversée postfixée. Vous pouvez utiliser des variables locales ou
globales dans ces expressions, si leurs valeurs sont numériques. Il est
possible d'indiquer des nombres hexadécimaux (précédés par "0x", par exemple
"0x13e"). Par défaut le résultat est en décimal. Les opérateurs reconnus
sont :
+ addition
- soustraction
* multiplication
/ division
% modulo (reste de la division entière)
< décalage à gauche
> décalage à droite
& et
| ou
sx dépile le sommet de pile dans le registre x
lx empile le contenu du registre x
HEX affiche le résultat en hexadécimal
Il y a dix registres (désignés par un chiffre de 0 à 9) initialisés
à zéro au démarrage du shell. Ils conservent leur valeur entre deux
évaluations d'expression. Les nombres et les opérateurs doivent être séparés
par au moins un espace, sauf le - unaire (négation).
Exemples :
echo { 34 3 / 4 + } => 15
echo { 7 3 - } => 4
echo { 10 -2 + } => 8
set cpt 3
echo { $cpt 2 * } => 6
set cpt { $cpt 1 + }
echo $cpt => 4
8. Les fichiers de commandes
Vous pouvez regrouper plusieurs commandes dans un fichier, et le
faire exécuter par AUSH comme un programme quelconque. Tout ce passera alors
comme si vous aviez tapé cette suite de commandes au clavier, à part sur le
plan des variables locales.
Dans un fichier de commandes, la variable locale "argc" indique le
nombre d'arguments reçus. AUSH positionne également des pseudo-variables
locales (elles n'apparaissent pas dans la liste des variables données par la
commande "set", et ne peuvent être modifiées) : la variable "0" contient le
nom du fichier de commandes, les variables "1", "2",... les différents
arguments, et la variable "*" la liste des arguments (à partir de "$1")
séparés par un espace.
Chaque fois que vous lancez AUSH, le fichier de commandes
"S:.aushrc" est exécuté (s'il existe).
9. Gestion de l'historique
AUSH peut mémoriser vos commandes, et vous permettre de les rappeler
par la suite. Le mécanisme d'historique, qui ne fonctionne qu'en mode
interactif, est contrôlé par la variable "history" (qui indique le nombre de
commandes à conserver). La commande "history" (décrite plus loin) vous
permet de voir le contenu de l'historique.
La variable "savehist" indique le nombre de commandes sauvées entre
chaque exécution d'un shell. Ce fichier (généré lors de la terminaison du
shell) est automatiquement chargé lors du démarrage, et les commandes qu'il
contient sont copiées dans l'historique. La variable "histfile" peut être
définie, pour indiquer le nom du fichier de sauvegarde. Par défaut ce
fichier est "S:.history".
10. Edition de la ligne de commandes
Ce mécanisme permet de se passer du gestionnaire de console NewCON.
Il est activé en affectant la valeur "1" à la variable "lineedit". Vous
pouvez alors utiliser les touches suivantes pour éditer vos lignes de
commande :
gauche caractère précédent.
droite caractère suivant.
shift-gauche mot précédent.
shift-droit mot suivant.
shift-haut dernière commande commençant par la ligne courante.
haut commande précédente dans l'historique.
bas commande suivante dans l'historique.
^A va en début de ligne.
^B caractère précédent.
^E va en fin de ligne.
^F caractère suivant.
^K efface la fin de ligne.
^L ré-affiche la ligne.
^N commande suivante dans l'historique.
^P commande précédente dans l'historique.
^S échange les deux caractères précédents.
^T première commande dans l'historique.
^W efface la fin du mot.
^X efface la ligne.
^Z dernière commande dans l'historique.
RETURN exécute la commande, après sauvegarde dans l'historique.
ESC annule la commande, après sauvegarde dans l'historique.
^V le mot précédent est considéré comme un nom de variable
et est remplacé par la valeur de cette variable.
Exemple : echo version<^V> => echo 1.10.
TAB complète le nom de fichier ou de variable.
Exemple : cd ram:
list Cl<TAB> => list ClipBoards/
echo $hi<TAB> => echo $history
S'il y a plusieurs possibilités, AUSH complète le plus
loin possible et affiche la liste des possibilités.
Pour compléter un nom de fichier, AUSH lui ajoute le
contenu de la variable "filepat" et étend la "pattern"
ainsi obtenue.
^D affiche la liste des possibilités pour compléter le
nom de fichier ou de variable (sans modifier la ligne
de commande).
HELP appelle la requête de fichier. Si vous choisissez un
fichier, son nom sera ajouté dans la ligne de commande.
f1 à f10 remplacé par la valeur des variables "f1" à "f10", ou
"F1" à "F10" si shifté.
IMPORTANT: il arrive de temps en temps que l'éditeur se bloque et ne
réagisse plus à ce que vous tapez au clavier. Dans ce cas, il suffit en
général de taper "|" (SHIFT-\) pour le débloquer.
11. Gestion des répertoires
Si vous définissez l'alias "dircmd", cet alias sera exécuté chaque
fois que vous taperez un nom de répertoire comme nom de commande (sans
argument, redirection, pipe, ni lancement en arrière-plan). Par exemple
"alias dircmd cd" vous permet d'avoir un "cd" implicite : taper le nom d'un
répertoire suffit pour y aller. Vous pouvez également définir un alias plus
complexe, comme "alias dircmd 'cd [] , list FILES QUICK'".
AUSH peut gérer une pile de répertoire (64 entrées). L'ajout d'un
répertoire ce fait à l'aide la commande interne "pushd", le retrait par
"popd", et l'affichage du contenu de la pile par "dirs" (ces commandes sont
décrites plus loin).
Vous pouvez utiliser cette pile dans vos commandes avec la forme
"=n", où "n" est le numéro d'un répertoire dans la pile (indiqué par la
commande "dirs").
12. Commandes internes
Ce chapitre décrit toutes les commandes internes de AUSH. Ces
commandes ne peuvent être lancées en arrière plan mais acceptent les
redirections en entrée et en sortie. Elles retournent 0 (RETURN_OK) ou 20
(RETURN_FAIL) suivant le cas.
Lors de l'affichage de la valeur d'une variable par les commandes
"setvar" ou "set", les attributs de cette variable sont affichés entre
parenthèses ("x" pour exportable, "r" pour lecture seulement).
alias
Affiche la liste des alias et leurs définitions.
alias nom
Affiche la définition de l'alias indiqué.
alias nom 'chaine'
Défini un alias "nom" de valeur "chaine". Dans la chaine, le
symbole "[]" indique où placer les arguments lors de la
substitution de l'alias. Notez que la chaine DOIT être placée
entre quotes simples.
cd [rep]
Sans argument affiche le nom du répertoire courant, sinon "rep"
devient le répertoire courant.
dirs
Affiche le contenu de la pile des répertoires.
echo [-c] [args...]
Affiche les arguments sur la sortie standard, suivis d'un retour
chariot sauf si vous indiquez l'option "-c".
eval
Passe en mode évaluation : toute ligne en entrée est analysée
comme une expression (voir syntaxe plus haut) et le résultat
affiché. Pour sortir de ce mode, tapez "x" tout seul sur une
ligne.
exit [code]
Retourne au niveau d'exécution précédent, avec le code retour
indiqué (0 par défaut). En mode interactif, termine le shell.
export vars...
Marque les variables locales indiquées comme "exportables". Ces
variables deviennent alors lisibles, modifiables et détruisibles
dans les fichiers de commandes lancés depuis le niveau
d'exécution courant.
for var in val1 val2... valn
...
done
Effectue une boucle. La variable "var" (locale) prend les
valeurs indiquées dans la liste, et pour chaque valeur la
séquence d'instruction entre le "for" et le "done" est exécutée
une fois. Après le "done", la variable contient la dernière
valeur pour laquelle la boucle a été effectuée. En mode
interactif, le prompt devient celui indiqué par la variable
"prompt3", entre le "for" et le "done".
Vous pouvez également utiliser la forme "for var in val1 ..
val2", qui effectue la boucle pour chaque valeur comprise entre
les nombres "val1" et "val2" inclus. Si le nombre "val2" est
inférieur au nombre "val1", la boucle est effectué avec un pas
de -1. Les nombres "val1" et "val2" peuvent être négatifs.
history
Donne la liste des commandes présentes dans l'historique.
if [NOT] condition
....
[else
....]
endif
Exécution conditionnelle. En mode "interactif", la chaine
d'invite devient celle indiquée par la variable "prompt2".
La condition peut être :
-d nom vrai si "nom" est un répertoire (1)
-e nom vrai si "nom" existe (1)
-f nom vrai si "nom" est un fichier (1)
-o nom nom2 vrai si "nom1" et "nom2" existent et que
"nom" est plus ancien que "nom2" (1)
-s nom vrai si "nom" est un fichier non vide (1)
str1 = str2 vrai si "str1" est identique à "str2"
n1 LT n2 vrai si n1 est inférieur n2
n1 EQ n2 vrai si n1 est égal à n2
n1 GT n2 vrai si n1 est supérieur n2
n1 LE n2 vrai si n1 est inférieur ou égal à n2
n1 NE n2 vrai si n1 est différent de n2
n1 GE n2 vrai si n1 est supérieur ou égal à n2
Le mot-clé "NOT" avant une condition permet d'inverser cette
condition. Jusqu'à 16 commandes "if" peuvent être imbriquées.
(1) Si la lettre après le tiret est en majuscule (exemple:
"-D"), le test échouera sans requêtes de l'AmigaDOS en cas
de volume absent, lecteur de disquette vide, etc...
jobs
Affiche la liste des processus lancés en arrière plan.
loadhist
Force le chargement immédiat du fichier contenant l'historique
des commandes. Cette commande peut être utile si vous changez la
valeur de la variable "histfile" et que vous voulez prendre en
compte le nouveau fichier.
popd [nb]
Sans arguments dépile le dernier répertoire empilé et en fait le
répertoire courant, sinon tronque la pile des répertoires aux
"nb" premiers répertoires ("popd 0" vide complètement la pile).
pushd rep
Empile le répertoire courant, puis fait de "rep" le répertoire
courant.
read [-f] var
Affecte à la variable locale indiquée une ligne lue sur l'entrée
standard. Retourne RETURN_FAIL en cas de fin de fichier.
L'option -f permet d'interdire la saisie d'une chaine vide.
readonly vars...
Empêche toute modification ou destruction des variables (locales
ou globales) indiquées. Cette opération est irréversible.
set
Affiche la liste des variables locales, ainsi que leur valeurs.
set var
Affiche la valeur de la variable locale "var".
set var val
Affecte la valeur "val" à la variable locale "var". La variable
est créée si elle n'existe pas encore.
setvar
Affiche la liste des variables globales, ainsi que leur valeurs.
setvar var
Affiche la valeur de la variable globale "var".
setvar var val
Affecte la valeur "val" à la variable globale "var". La variable
est créée si elle n'existe pas encore.
shift
Décale les arguments d'un fichier de commandes : la
pseudo-variable "1" reçoit le contenu de "2", puis la
pseudo-variable "2" celui de "3", etc... La variable "argc" et
la pseudo-variable "*" sont mises à jour.
source fichier
Exécute le fichier de commandes indiqué. Si vous redirigez la
sortie de cette commande, la redirection concernera toutes les
commandes du fichier.
stop [code]
Interrompt l'exécution de la boucle "for...done" courante, avec
le code retour indiqué (0 par défaut).
time <commande>
Lance l'exécution de la commande indiquée, puis affiche la durée
(en secondes) d'exécution de cette commande. Peut être utilisé
pour toutes les commandes, y compris les commandes internes et
les commandes lancées en arrière plan.
unalias noms...
Détruit les alias indiqués.
unset vars...
Détruit les variables locales indiquées.
writehist
Force une sauvegarde immédiate de l'historique. Cette commande
peut être utilisée par exemple avant de lancer un programme qui
risque de "planter" votre Amiga.
13. Variables spéciales
Les variables suivantes permettent de contrôler et de paramétrer
AUSH. Sauf dans le cas où une valeur initiale est indiquée, elles ne sont
pas définies au démarrage. Il est recommandé de les définir comme variables
globales (c'est d'ailleurs ce que fait AUSH pour celles qui ont une valeur
initiale) ou éventuellement comme variables Commodore/ARP.
cmdnum numéro de commande, de la forme "_ShellNumber_CmdNumber"
(garanti différent pour chaque commande exécutée).
cwd nom du répertoire courant.
debug si vaut "1", trace les commandes exécutées (avant et
après première interprétation, utile pour la mise au
point des fichiers de commandes).
delim caractères délimiteurs de mots pour les fonctions "mot
suivant", "mot précédent" et "efface la fin du mot" de
l'éditeur de la ligne de commande.
Valeur initiale : " :/".
filepat chaine ajoutée au mot en cours pour compléter les nom de
fichiers.
Valeur initiale : "#?".
fullhist si vaut "1", sauvegarde toutes les commandes dans
l'historique, sinon ne sauvegarde pas deux fois de suite
la même commande.
histfile nom du fichier de sauvegarde de l'historique entre deux
sessions. Si cette variable n'est pas définie,
l'historique est sauvegardé dans "S:.history".
histmin longueur minimale que doit avoir une commande pour être
conservée dans l'historique.
Valeur initiale : 3.
history nombre de commandes conservées dans l'historique (si non
défini ou inférieur à 1, seule la dernière commande est
sauvée).
Valeur initiale : 50.
insert si vaut "1", l'édition de la ligne de commande se fait
en mode "insertion" (mode "remplacement" sinon).
Valeur initiale : 1.
ioerror code d'erreur positionné par la dernière commande ayant
échoué (pour l'instant ne marche que pour les commandes
internes).
Valeur initiale : 0.
language langue des messages d'erreurs. Les valeurs reconnues
sont "english" et "deutsch". Pour toute autre valeur, ou
si cette variable n'est pas définie, les messages seront
en français.
lineedit si vaut "1", active l'édition de la ligne de commande.
noexpand si vaut "1", désactive l'extension des méta-caractères.
path indique le chemin de recherche des commandes à exécuter,
sous la forme d'une liste de noms de répertoires séparés
par un caractère ";". Pour désigner le répertoire
courant, indiquez "." comme nom de répertoire. Si un
fichier avec le bit "s" est trouvé, une commande
"source" est lancée automatiquement sur ce fichier.
Exemple : setvar path 'ram:;.;c:;sys:utilities'
prompt chaine d'invite, interprétée comme suit :
%h numéro dans l'historique
%# numéro du shell
%i niveau d'imbrication des "if"
%l niveau d'imbrication de boucle
%c nom du répertoire courant (variable "cwd")
%s dernier code retour (variable "status")
%Vnom valeur de la variable "nom".
%T heure (HH:MM:SS)
%d jour du mois (1-31)
%D jour de la semaine (Mon-Sun)
%m mois (1-12)
%M nom du mois (Jan-Dec)
%y année (1900-1999)
%C caractère CSI (0x9B)
%N caractère retour chariot
%f taille de mémoire FAST libre
%v taille de mémoire CHIP libre
%a taille de mémoire libre (CHIP+FAST)
Valeur initiale : "%C0;33;40m< %# - %c >%C0;31;40m ".
prompt2 idem que "prompt", mais utilisé entre "if" et "endif".
Valeur initiale : "%i> ".
prompt3 idem que "prompt", mais utilisé entre "for" et "done".
Valeur initiale : "%l) ".
NOTE : en l'absence de définition, "> " est utilisé comme prompt.
savehist nombre de commandes sauvées entre chaque session (si non
défini ou inférieur à 1 rien n'est sauvé).
status code retour de la dernière commande exécutée.
titlebar idem que "prompt", mais pour le titre de la fenêtre
shell.
trap commande(s) à exécuter lors de l'interruption d'un
fichier de commandes ou d'une boucle "for...done" par
l'appui sur CTRL-C ou CTRL-D. Contrairement aux autres
variables spéciales, il est conseillé de définir cette
variable localement (commande "set", permet à chaque
fichier de commandes de la modifier en fonction de ses
besoins). Il est également conseillé d'indiquer une
commande "exit" comme dernière commande (exemple : set
trap 'delete $tmpfile , exit 20'), sinon l'exécution
reprendra au point où elle en était (pour ignorer les
interruptions : set trap ';'). Si cette variable n'est
pas définie, l'exécution est arrêtée avec un code retour
de 20.
version numéro de version de AUSH.
14. Notes
Sauf si vous lui affectez une pile de plus de 4000 octets AVANT de
le lancer, AUSH ne pourra exécuter plus d'une quinzaine de fichiers de
commandes et/ou de boucles imbriquées (vous obtiendrez le message "pas assez
de place dans la pile !").
Si le nom indiqué pour les redirections en sortie est "TTY" (i.e.
">TTY" ou ">>TTY"), la redirection se fait vers la fenêtre du shell. Cela
peut être utile dans un fichier de commandes, pour afficher un message alors
que la sortie de toutes les commandes a été redirigée vers un fichier.
Les pipes sont gérés à l'aide de fichiers temporaires créés dans le
répertoire "T:", les tentatives d'utilisation de "PIPE:" et "FIFO:" se
soldant pour l'instant par un Gourou dès que plus de deux commandes sont
enchainées. Le répertoire "T:" est également utilisé pour stocker des
fichiers temporaires lors des substitutions de commandes et de l'exécution
des boucles "for...done".
La forme "cmd &" correspond à la forme "run cmd" des shells
Commodore et ARP. Notez que AUSH attend la fin de toutes les commandes
lancées en arrière plan avant de terminer. La commande "jobs" vous permettra
de savoir quelles sont ces commandes.
Sous système 2.04, AUSH n'est pas capable de récupérer le code
retour d'une commande lancée en arrière plan.
15. Historique
v1.00 28-Feb-92, 29564 octets
o Première version diffusée.
v1.10 28-Mar-92, 31828 octets
o Cherche les variables également dans les variables ARP/Commodore
et Manx.
o La touche "^D" affiche les possibilités pour compléter le nom de
fichier ou de variable, les touches "^B", "^F", "^N" et "^P"
font la même chose que "gauche", "droite", "bas" et "haut".
o L'éditeur de ligne de commande efface le curseur pendant qu'il
exécute une commande (affichage plus rapide).
o La requête de fichier récupère le mot en cours pour initialiser
le répertoire initial de la requête.
o Remet à zéro les signaux SIGBREAKF en retour de l'éditeur de
ligne de commandes (car ils sont positionnés si on utilise ^D,
^E, ou ^F).
o Les formes "!!", "!n" et "!chaine" peuvent être indiquée
n'importe où sur la ligne de commande.
o Ajout des formes -D, -E, et -F à la commande "if".
o Ajout de la forme "for var in val1 .. val2" pour la commande
"for...done".
o Ajout de l'alias "dircmd".
o Ajoute un espace après une définition d'alias sans arguments (si
on faisait "alias ls dir" puis "ls ram:" on avait un message
"Please insert volume dirram: in any drive").
o Messages d'erreur en allemand si la variable "language" vaut
"deutsch".
o Commande "setenv" renommée en "setvar" (plus de conflits avec la
commande de Commodore), ajout de la commande "echo".
o Ajout des variables "version" et "path", variable "ioerror"
initialisée à "0", variable "insert" initialisée à "1", variable
"autocd" supprimée.
v1.11 29-Mar-92, 31832 octets
o La commande "echo" tient compte des redirections en sorties
v1.12 11-Apr-92, 32244 octets
o Charge l'historique après l'exécution de "S:.aushrc", afin de
prendre en compte une éventuelle modification de la valeur de la
variable "history".
o Ajout des formes "NE", "LE", et "GE" à la commande "if".
o La forme "for i in val1 .. val2" accepte des nombres négatifs et
que "val2" soit inférieur à "val1".
o Plus de contrôle de la taille des arguments pour les commandes
internes.
o Ajout de la fonction "^V" à l'éditeur de ligne de commandes.
v1.13 18-Apr-92, 32280 octets
o Lors de la recherche d'une commande à l'aide de la variable
"path" vérifie que l'objet trouvé est bien un fichier (et non un
répertoire).
v1.14 26-Apr-92, 32300 octets
o Deux erreurs corrigées dans la substitution de commande :
n'éliminait pas le "`" final, calcul de la longueur des
arguments incorrect.
o Une erreur corrigée dans le parser : interprétait quand même les
caractères "<>,;" s'ils étaient en première position dans une
chaine entre quotes.
o Messages en allemands revus
v1.15 01-May-92, 32364 octets
o Ajout de la variable "histfile".
o Deux erreurs corrigées dans le calcul de la longueur des
arguments : oubliait de compter les guillements ou les quotes,
et de prévoir un peu de place supplémentaire pour les arguments
"splités".
v1.16 11-May-92, 32404 octets
o commande "echo" revue : quand on met l'option -c supprime
vraiment le '\n' final (i.e. ne le remplace pas par un espace)
v1.20 16-May-92, 32568 octets
o ajout des commandes "loadhist" et "writehist"
o ajout de la forme "%Vnom" à la syntaxe du prompt
o modification du "parser" : n'analyse la partie droite d'une
commande composée qu'après avoir exécuté la partie gauche, et
donc :
- "cd ram: , delete *" donne le résultat attendu ("*" était
étendu avant de faire le "cd")
- toutes les commandes simples peuvent être des alias (et non
plus seulement la première)
- on peut écrire une boucle sur une seule ligne ("for i in 1 ..
50 , echo $i , done" ne marchait pas, maintenant même "cd
ram: , for i in *.c , echo $i , compress $i , done , echo
fini" fonctionne !)
v1.21 17-May-92, 32912 octets
o ajout de la commande "time"
v1.22 23-May-92, 32944 octets
o bug corrigé dans la gestion des boucles "for...done" : lors de
l'écriture des commandes dans le fichier temporaire, ne forçait
pas une fin de ligne après chaque commande
v1.23 01-Jun-92, 33328 octets
o Plusieurs bugs corrigés dans la gestion des boucles "for...done"
écrites sur une même ligne : "for i in 1 .. 5,echo $i,done"
marche, ainsi que "for i in 1 .. 5 , list | wc , done"
o Si trouve un fichier avec le bit "s" en cherchant une commande
dans le chemin défini par la variable "path", lance
automatiquement une commande "source" sur ce fichier.
o La touche "^S" échange les deux caractères précédant le curseur.
o Les touches "^D" et "<TAB>" sont utilisables sans préfixe, et
donc en début de ligne ou après un espace.
o Bug corrigé dans l'éditeur de ligne de commande: après un
"shift-haut", les touches "haut" et "bas" ne donnaient pas les
bonnes commandes.
v1.30 14-Jun-92, 33932 octets
o Plusieurs erreurs détectées par "Enforcer" et "Mungwall"
corrigées.
o Bug corrigé dans la commande "shift" : ne positionnait pas
"argc" correctement.
o Reconnait "$*" (remplacé par la liste des arguments séparés par
un espace).
o Ajout de l'option -f à la commande "read".
o La variable "argc" est en lecture seulement.
o Vérifie les noms de variables donnés aux commandes internes
(interdit les pseudo-variables arguments).
o Les spécifications "&[pri]" et "@pri" peuvent être indiquées
n'importe où sur la ligne de commande.
v1.40 26-Jun-92, 37764 octets
o Recompilé avec le SAS/C 5.10b (avec pragmas et optimisation)
o Peut être rendu résident (code "pure")
o Enorme bug corrigé dans la fonction strxcat() (ne sauvegardait
pas le registre a2)
o Nombreuses modifications pour mieux tenir compte de la version
du système, ainsi sous système 2.04 :
- n'a plus besoin de "arp.library"
- peut exécuter les programmes résidents/internes (ROM)
- la commande "Execute" peut être utilisée
o Modification de l'évaluateur d'expressions :
- on peut indiquer des valeurs en hexa (0x1FD)
- ajout des opérateurs "HEX", "<", ">", "&", et "|"
o Ajout de l'option "-o" à la commande "if"
o Bug corrigé dans la commande "if": n'appelait UnLock() dans
certains cas d'erreur
v1.41 30-Jun-92, 37864 octets
o Correction dans la recherche des commandes: ne cherche plus le
chemin si la commande est résidente
v1.42 06-Jul-92, 37872 octets
o Bug corrigé dans la gestion des boucles "for...done": "oubliait"
les redirections des commandes dans la boucle
o Ne fait plus crier "Enforcer" quand on fait "!string" (ou
"shift-haut" dans l'éditeur de lignes de commandes) et qu'aucune
commande commençant par "string" ne se trouve dans l'historique